﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using IbsysII.Domain;
using IbsysII.Util;

namespace IbsysII.Service
{
    public class Materialverwaltung
    {
        public static List<Produktionsauftrag> lstProd;
        public static int warteListeMenge;
        public static int wartelistÜbertarg;
        public static int pn1;
        
        public static List<Produktionsauftrag> berechneProdMenge(Teil teil)
        {
            if (teil.Teileart.CompareTo('P') == 0)
            {
                lstProd = new List<Produktionsauftrag>();
                wartelistÜbertarg = 0;
            }
            if (teil.TeilNr == 1)
                pn1 = MainWindow.mengeP11;
            if (teil.TeilNr == 2)
                pn1 = MainWindow.mengeP21;
            if (teil.TeilNr == 3)
                pn1 = MainWindow.mengeP31;
            else
                pn1 = 0;
            Produktionsauftrag prod = new Produktionsauftrag();
            

            if (teil.Teileart.CompareTo('P') == 0 || teil.Teileart.CompareTo('E') == 0)
            {
                var w = (from t in App.warteliste where t.WartelisteTeil == teil.TeilNr select t);
                var b = (from t in App.bearbeitung where t.BearbeitungTeil == teil.TeilNr select t);
                warteListeMenge = 0;
                int bearbeitungMenge = 0;
                foreach (Warteliste w1 in w)
                {
                    warteListeMenge += w1.WartelisteMenge;
                }

                foreach (Bearbeitung b1 in b)
                {
                    bearbeitungMenge += b1.BearbeitungMenge;
                }
                //Gleichtele verteilen
                warteListeMenge = (teil.TeilNr == 16 || teil.TeilNr == 17 || teil.TeilNr == 26) ? warteListeMenge / 3 : warteListeMenge;
                bearbeitungMenge = (teil.TeilNr == 16 || teil.TeilNr == 17 || teil.TeilNr == 26) ? bearbeitungMenge / 3 : bearbeitungMenge;
                int lagermenge = (teil.TeilNr == 16 || teil.TeilNr == 17 || teil.TeilNr == 26) ? teil.Lagermenge / 3 : teil.Lagermenge;
                //Console.WriteLine("Geben Sie den Sichernheitsbestand von " + teil.Teileart + " " + teil.TeilNr + " ein");
                //teil.Sicherheitsbestand = Convert.ToInt32(Console.ReadLine());
                int bedarfbe = teil.Bedarf + wartelistÜbertarg + teil.Sicherheitsbestand + (1/3*pn1)- lagermenge - warteListeMenge - bearbeitungMenge;
                int bedarf = (bedarfbe < 0) ? 0 : bedarfbe;
                if (teil.TeilNr == 1 || teil.TeilNr == 51 || teil.TeilNr == 50 || teil.TeilNr == 49 || teil.TeilNr == 2 || teil.TeilNr == 56 || teil.TeilNr == 55 || teil.TeilNr == 54 || teil.TeilNr == 3 || teil.TeilNr == 31 || teil.TeilNr == 30 || teil.TeilNr == 29)
                    wartelistÜbertarg = warteListeMenge;
                prod.Teil = teil;
                prod.Teil.Bedarf = bedarf;
                prod.ProdAufNr ++;
                if ((warteListeMenge != 0 || bearbeitungMenge != 0 || prod.Teil.Level == 5)&&teil.Teileart.CompareTo('P')!=0)
                    prod.Prio = 5;

                else
                    prod.Prio = prod.Teil.Level;
                lstProd.Add(prod);
            }
            if (teil.Teileart.CompareTo('K') == 0)
            {
                Boolean enthalten = false;
                foreach (Produktionsauftrag p in lstProd)
                {
                    if (p.Teil.TeilNr == teil.TeilNr)
                    {
                        p.Teil.Bedarf += teil.Bedarf * teil.Stuecklistenmenge;
                        p.Teil.BedarfN1 += teil.BedarfN1 * teil.Stuecklistenmenge;
                        p.Teil.BedarfN2 += teil.BedarfN2 * teil.Stuecklistenmenge;
                        p.Teil.BedarfN3 += teil.BedarfN3 * teil.Stuecklistenmenge;
                        enthalten = true;
                    }
                }

                if (!enthalten)
                {
                    teil.Bedarf = teil.Bedarf * teil.Stuecklistenmenge;
                    teil.BedarfN1 = teil.BedarfN1 * teil.Stuecklistenmenge;
                    teil.BedarfN2 = teil.BedarfN2 * teil.Stuecklistenmenge;
                    teil.BedarfN3 = teil.BedarfN3 * teil.Stuecklistenmenge;
                    prod.Teil = teil;

                    lstProd.Add(prod);
                }







            }
            foreach (Teil t1 in teil.lstZuordnung)
            {
                t1.Bedarf = prod.Teil.Bedarf;
                t1.BedarfN1 = prod.Teil.BedarfN1;
                t1.BedarfN2 = prod.Teil.BedarfN2;
                t1.BedarfN3 = prod.Teil.BedarfN3;
                berechneProdMenge(t1);
            }
            
            return lstProd;

        }
       
        
    }
}
